package com.example.ivideo_2211a

import android.app.Application
import android.content.ContentValues.TAG
import android.os.Handler
import android.os.Looper
import android.util.Log
import com.alibaba.android.arouter.launcher.ARouter
import com.example.common.LoggerInitializer
import com.tencent.rtmp.TXLiveBase
import com.tencent.rtmp.TXLiveBaseListener
import com.umeng.commonsdk.BuildConfig
import com.umeng.commonsdk.UMConfigure
import com.umeng.socialize.PlatformConfig
import java.util.concurrent.Executors

/**
 * 1.核心任务（同步执行）
 * 2.重要任务（异步并行执行）
 * 3.非核心任务（延迟执行）
 */
class App : Application() {
    // 线程池用于并行执行初始化任务
    private val initExecutor = Executors.newFixedThreadPool(3)
    // 主线程Handler用于延迟执行非核心任务
    private val mainHandler = Handler(Looper.getMainLooper())

    override fun onCreate() {
        super.onCreate()
        // 1. 核心任务：必须在启动时同步初始化的组件（影响首屏展示的功能）
        initCoreComponents()

        // 2. 重要任务：可并行执行但需要尽早完成的组件
        initImportantComponentsAsync()

        // 3. 非核心任务：延迟到启动完成后执行（不影响首屏体验）
        scheduleDeferredInit()
    }

    /**
     * 核心组件初始化（同步执行，必须在启动时完成）
     * 这些组件如果不初始化会导致首屏功能异常
     */
    private fun initCoreComponents() {
        // ARouter路由框架（页面跳转依赖，必须优先初始化）
        if (BuildConfig.DEBUG) {
            ARouter.openDebug()
            ARouter.openLog()
        }
        ARouter.init(this)
    }

    /**
     * 重要组件异步初始化（并行执行，不阻塞主线程）
     * 这些组件影响次要功能，可在后台初始化
     */
    private fun initImportantComponentsAsync() {
        initExecutor.submit {
            // 腾讯直播SDK初始化（如果首屏不播放视频，可延迟；否则需放核心任务）
            initTencentLiveSDK()
        }

        initExecutor.submit {
            // 友盟统计初始化（统计分析非首屏必需）
            initUmeng()
        }
    }

    /**
     * 非核心组件延迟初始化（启动完成后执行）
     * 这些组件完全不影响启动体验，可延迟几秒或在主线程空闲时执行
     */
    private fun scheduleDeferredInit() {
        // 延迟3秒执行，或使用IdleHandler在主线程空闲时执行
        mainHandler.postDelayed({
            initExecutor.submit {
                // AdMob广告SDK初始化（广告通常不是首屏必需）
                initializeAdMob()
            }
        }, 3000)
    }

    private fun initTencentLiveSDK() {
        val licenceURL = "https://license.vod2.myqcloud.com/license/v2/1372913491_1/v_cube.license"
        val licenceKey = "8119506129aa413f73089e7a1a246a70"
        TXLiveBase.getInstance().setLicence(this, licenceURL, licenceKey)
        TXLiveBase.setListener(object : TXLiveBaseListener() {
            override fun onLicenceLoaded(result: Int, reason: String) {
                Log.i(TAG, "腾讯直播授权加载: result=$result, reason=$reason")
            }
        })
    }

    private fun initUmeng() {
        UMConfigure.init(
            this,
            "5a12384aa40fa3551f0001d1",
            "umeng",
            UMConfigure.DEVICE_TYPE_PHONE,
            ""
        )
        // 第三方登录配置（如果首屏不需要登录，可延迟到登录页展示前初始化）
        PlatformConfig.setWeixin("wxdc1e388c3822c80b", "3baf1193c85774b3fd9d18447d76cab0")
        PlatformConfig.setQQZone("101830139", "5d63ae8858f1caab67715ccd6c18d7a5")
        PlatformConfig.setSinaWeibo("3921700954", "04b48b094faeb16683c32669824ebdad", "http://sns.whalecloud.com")
    }

    private fun initializeAdMob() {
        com.google.android.gms.ads.MobileAds.initialize(this) { initializationStatus ->
            val statusMap = initializationStatus.adapterStatusMap
            for (adapterClass in statusMap.keys) {
                val status = statusMap[adapterClass]
                Log.d("AdMob", "适配器: $adapterClass, 状态: ${status?.description}, 延迟: ${status?.latency}")
            }
        }
        val requestConfiguration = com.google.android.gms.ads.RequestConfiguration.Builder()
            .setTestDeviceIds(listOf("ABCDEF012345"))
            .build()
        com.google.android.gms.ads.MobileAds.setRequestConfiguration(requestConfiguration)
    }

    /**
     * 应用终止时调用，用于释放资源
     */
    override fun onTerminate() {
        super.onTerminate()
        // 释放线程池资源
        initExecutor.shutdown()
        // 销毁ARouter（可选）
        ARouter.getInstance().destroy()
    }
}
